欸,各位,先問個靈魂拷問:你有沒有過這種時刻?
凌晨三點,Slack 叮叮咚咚響個不停,你眼睛還半瞇著,腦子裡只有一句話:「拜託,這次不是我炸的…」
結果一看監控,Node Exporter 告訴你——主機 CPU 拉滿、記憶體吃爆、硬碟 I/O 像你家巷口早餐店阿姨在甩鍋一樣瘋狂。
然後呢?
Node Exporter 就只會冷冷地丟給你一張「宿主機體檢報告」,像醫生丟給你一份化驗單,上面寫著「肝指數爆表」。
但到底是誰喝醉?誰偷喝酒?醫生不知道,反正不是他喝的。
這時候,你心裡的 OS 就是:
「幹,到底是哪個容器在吃我資源?站出來啊!」
這時候…輪到 cAdvisor 出場了。
他就像你宿舍裡的「偷喝飲料偵探」,專門幫你抓出哪個死小孩在偷吸你的珍奶。
容器化之後,世界變得很神奇。
以前一台 VM 跑一個服務,誰吃爆資源,一目了然。
現在一台主機可能塞了 10 個、20 個 container,光憑 Node Exporter 你只知道「整間公司加班費超標」,但完全不知道「是誰狂打卡」。
比喻一下:
這就很重要,因為:
docker stats 一直盯著數字,眼睛瞎掉。那 cAdvisor 到底怎麼知道「哪個 container 在爆肝」?
其實它就是去翻一些系統內部的小帳本:
cgroups:Linux 的資源管理工具,負責記錄每個 process 的 CPU、Memory、I/O 等使用情況。/proc /sysfs:像 Linux kernel 的小日記本,什麼都寫在這裡。docker.sock:就是 Docker 的「小密道」,你問它「現在有誰在跑」,它就會老實交代。然後 cAdvisor 幫你做幾件事:
/metrics endpoint,讓 Prometheus 抓欸,不過提醒你,它不是魔法師,資料都是即時抓的。要看歷史走勢,你得靠 Prometheus 幫你存一段時間(預設大概 15 天,可以自己調)。如果要更久,那就得開 remote write,把資料丟去 Thanos、VictoriaMetrics 之類的長期儲存系統。
來,上程式碼(docker-compose.yml):
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.49.1
ports:
- "127.0.0.1:8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- monitor-net
這裡的重點:
docker.sock:讓 cAdvisor 知道有哪些容器在跑/sys、/proc:拿系統統計數據8080:它的 Web UI + Prometheus metrics 入口第一次掛 / 的時候,我內心真的抖了一下。就像第一次打開室友的抽屜,看到奇怪的東西。幸好這裡是只讀 :ro,不然真的會變兇案現場。
啟動後,打開 http://localhost:8080,你會看到:
打 http://localhost:8080/metrics,會看到 Prometheus 指標:
container_cpu_usage_seconds_total{container="apiGateway"} 12345.6
container_memory_usage_bytes{container="noteserver"} 104857600
container_fs_usage_bytes{container="note-storage"} 209715200
container_network_receive_bytes_total{container="open-webui"} 987654

第一次看到這些指標,腦袋一定會想:「這啥鬼?」
但仔細想一下,它其實就是在爆料:
就跟看室友的購物紀錄一樣,有點赤裸,但超有效、刺激的。
監控要有歷史數據,不然你只能即時盯著,根本沒意義。
所以我們在 prometheus.yml 裡加:
scrape_configs:
- job_name: 'app_metrics'
static_configs:
- targets:
- 'cadvisor:8080'
這樣,Prometheus 就會自動收集所有容器的 metrics。然後你就能在 Grafana 上畫出:
有了這些圖表,你就能跟老闆說:「你看,不是我炸的,是那個容器自己吃爆的。」
然後老闆會回:「哦,那是你寫的吧?」
幹。
有了 cAdvisor,你就能:
快速定位資源怪獸
→ 主機 CPU 飆高?打開 dashboard,一秒看出是誰在吃 CPU
→ 就像抓到誰偷用你 Netflix 帳號。
避免容器打架
→ 某個容器吃光 RAM,其他容器被迫 OOM?cAdvisor 會留下證據
→ 像是辦公室有個人狂開冷氣,結果整棟跳電。
容量規劃
→ 長期觀察容器資源曲線,決定要不要加 host,或調整限額
→ 就像看體重曲線,知道自己是不是該戒手搖。
其實我覺得工程師的監控生活,跟感情生活有點像。
你以為穩定了,結果某一天突然炸掉。
你以為 CPU 飆高只是暫時的,結果它根本就是出軌的前兆。
cAdvisor 就像是那個會偷偷幫你查對象手機的人。
雖然有點侵犯隱私,但…嗯,至少能救命。
所以,現在你的監控三件套:
👉 好啦,Day 26 到這邊。
cAdvisor 不是什麼炫技神器,但它就是那種「平常不會想起來,但一炸掉就發現:幹,沒它根本找不到兇手」的存在。
有點像家裡抽屜裡的保險套——你不會天天拿出來說嘴,但沒有它,代價很可怕。
欸,說到「外部威脅」…明天我們就來聊 黑箱偵測器 Blackbox Exporter。
因為內部健康檢查是一回事,外面的人能不能正常敲門又是另一回事。
畢竟 API 就像交友軟體,你自己覺得「我活得好好的啊」,但外面的人卻回:「靠,怎麼按都沒反應」。